#include <iostream>
#include "contacts.pb.h" // 联系人信息就包含在生成的头文件当中


int main()
{            
    std::string people_str; // 因为是to string 方法所以定义string来接收
    // 将序列化和反序列化用大括号隔开 这样定义两个people就不会冲突
    {
            // • 对⼀个联系⼈的信息使⽤ PB 进⾏序列化，并将结果打印出来。
            contacts::PeopleInfo people;
            people.set_name("张三");
            people.set_age(34);

        /* 这就是SerializeToString方法 按住ctrl跳转至该方法定义
            bool MessageLite::SerializeToString(std::string* output) const {
        output->clear();
        return AppendToString(output);
        }
        */    
            if(!people.SerializeToString(&people_str)) // 序列化方法定义在PeopleInfo的父类当中
            {
                std::cerr << "序列化联系人失败！" <<std::endl;
                return -1;
            }
            std::cout << "序列化成功，结果为" << people_str << std::endl;
    }
    

    {
            //• 对序列化后的内容使⽤ PB 进⾏反序列，解析出联系⼈信息并打印出来。
            contacts::PeopleInfo people;
            if(!people.ParseFromString(people_str))
            {
                std::cerr << "反序列化联系人失败！" << std::endl;
                return -2;
            }
            std::cout   << "反序列化成功！"<< std::endl
                        << "姓名：" << people.name() << std::endl
                        << "年龄：" << people.age() << std::endl;
    }
    return 0;
}